home *** CD-ROM | disk | FTP | other *** search
- /*
- ** TESTDRV - CD-ROM Device driver test
- **
- **
- ** prepare.c Unsupported commands for creating a control archive
- **
- **
- ** HISTORY:
- ** 10/01/90 Final (v1.0) -by- JYG
- ** 12/06/91 Revised by Siddhartha Roy
- */
- #include<malloc.h>
- #include"test.h"
-
- static int bytes;
- char _near *pchBuf;
-
- void SectorToArc(drv,lSector,bAddrMode,bReadMode,pOutFile)
- Dev_List *drv;
- DWORD lSector;
- BYTE bAddrMode;
- BYTE bReadMode;
- FILE *pOutFile;
- {
-
- printf("\nReading Sector\n");
- if (ERRORBIT & WDvRqReadL(drv,pchBuf,lSector,1,bAddrMode,bReadMode,0,0))
- {
- printf("Read Error. Skipping Sector\n");
- return;
- }
-
- printf("\nWriting Sector %lx\n",lSector);
- fwrite(&bAddrMode,1,1,pOutFile);bytes++;
- fwrite(&lSector,sizeof(DWORD),1,pOutFile);bytes+=sizeof(DWORD);
- fwrite(&bReadMode,1,1,pOutFile);bytes++;
- if (bReadMode == RAW_MODE)
- {
- printf("\nRAW_MODE %lx\n",lSector);
- fwrite(pchBuf,1,RAW_SECTOR_SIZE,pOutFile);bytes+=RAW_SECTOR_SIZE;
- }
- else
- {
- printf("\nCOOKED_MODE %lx\n",lSector);
- fwrite(pchBuf,1,COOKED_SECTOR_SIZE,pOutFile);bytes+=COOKED_SECTOR_SIZE;
- }
- }
-
- /*
- ** prepData() - prepares the control data files
- ** for the automated testing.
- **
- ** CD-ROM requirements are:
- ** must support Redbook Addressing
- ** must support Raw mode reads
- */
-
- void prepData(drv)
- Dev_List *drv;
- {
- extern WORD cwHSGSectors, cwRedSectors;
- extern FILE * pOutFile;
- extern DWORD mplHSGSector[];
- extern DWORD mplRedSector[];
- extern WORD wDriveNum;
-
- char * title;
- char szDiskTitle[256];
- char szVolLabel [13];
- DWORD vsize;
- BYTE iTrack,len;
- WORD iSector;
-
-
- UPCCode_Rec upc;
- DiskInfo_Rec dinfo;
- TnoInfo_Rec tnoinfo;
- bytes = 0;
-
- if (pOutFile == stdout)
- fatalError("Please specify an archive file in the profile");
- else if (cwHSGSectors == 0 && cwRedSectors == 0)
- fatalError("Please specify the sectors to archive in the profile");
-
- // Write header
-
- printf("Enter a single line disk title: ");
- *szDiskTitle = (char)253;
-
- cgets(szDiskTitle);
- printf("\n");
-
- // The archive file consists of:
- // [sizeof(title)][Title][UPCCode_Rec][DiskInfo_Rec][Volsize DWORD]
- // [...all Track info for each track...]
-
- len = *((char *)(szDiskTitle+1));
- title = szDiskTitle+2;
- title[len] = '\0';
-
- VolLabel( wDriveNum, szVolLabel );
-
- printf("Getting Disc Characteristics\n");
- if (ERRORBIT&WDvRqIoiUPCCode(drv,&upc))
- {
- printf("Not including UPC info\n");
- upc.code = 0;
- }
- if (ERRORBIT&WDvRqIoiDiskInfo(drv,&dinfo))
- {
- printf("Not including disk info\n");
- dinfo.code = 0;
- }
- if (ERRORBIT&WDvRqIoiVolSize(drv,&vsize))
- {
- printf("Not including volume size\n");
- vsize = 0L;
- }
-
- printf("Writing Disc Characteristics\n");
- fileErrorTest(fwrite(&len,1,1,pOutFile));bytes++;
- fileErrorTest(fwrite(title,1,len,pOutFile));bytes+=len;
-
- fileErrorTest(fwrite(&upc,sizeof(UPCCode_Rec),1,pOutFile));bytes+=sizeof(UPCCode_Rec);
- fileErrorTest(fwrite(&dinfo,sizeof(DiskInfo_Rec),1,pOutFile));bytes+=sizeof(DiskInfo_Rec);
- fileErrorTest(fwrite(&vsize,sizeof(DWORD),1,pOutFile));bytes+=sizeof(DWORD);
- fileErrorTest(fwrite(szVolLabel,1,13,pOutFile));bytes+=13;
-
-
- // All track information
-
- printf("Getting Track Characteristics\n");
- for (iTrack=dinfo.low_track;iTrack<=dinfo.hi_track;iTrack++){
- if (ERRORBIT&WDvRqIoiTnoInfo(drv,iTrack,&tnoinfo))
- fatalError("Bad Track Info");
- fileErrorTest(fwrite(&tnoinfo,sizeof(TnoInfo_Rec),1,pOutFile));bytes+=sizeof(TnoInfo_Rec);
- }
-
- printf("\n%d bytes header information",bytes);
-
- pchBuf = _nmalloc(RAW_SECTOR_SIZE);
- //
- // Write the first COOKED Sector for a sanity check
- //
- SectorToArc( drv,0L,HSG_ADDRMODE,COOKED_MODE,pOutFile );
- //
- // Write all of the Sectors specified in the profile
- //
- for (iSector = 0; iSector < cwHSGSectors; iSector++)
- {
- SectorToArc(drv,mplHSGSector[iSector],HSG_ADDRMODE,COOKED_MODE,pOutFile);
- SectorToArc(drv,mplHSGSector[iSector],HSG_ADDRMODE,RAW_MODE,pOutFile);
- }
- for (iSector = 0; iSector < cwRedSectors; iSector++)
- {
- SectorToArc(drv,mplRedSector[iSector],REDBOOK_ADDRMODE,COOKED_MODE,pOutFile);
- SectorToArc(drv,mplRedSector[iSector],REDBOOK_ADDRMODE,RAW_MODE,pOutFile);
- }
- fclose(pOutFile);
-
- printf("Done Creating Archive, %d bytes written\n",bytes);
- _nfree(pchBuf);
- }